package p05_BeanFactory后处理器;


import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.support.GenericApplicationContext;

/**
 * 常见BeanFactory后处理
 * BeanFactory负责给BeanFactory提供扩展，使其能够解析一些注解
 */
public class _1_创建beanFactory后处理器 {

    public static void main(String[] args) {
        /**
         * 原生容器无法解析@Configuration，@ComponentScan，@Bean，@Component
         * 加一个后处理器ConfigurationClassPostProcessor，来解析这些注解
         */
        GenericApplicationContext context = new GenericApplicationContext();
        context.registerBean("config", Config.class);

        /**
         * ConfigurationClassPostProcessor:一个强大的BeanFactory后处理，能够解析很多注解
         * 加了这个后处理器，就能解析@Configuration，@ComponentScan，@Bean，@Component,@Import,@ImportResource
         */
        context.registerBean(ConfigurationClassPostProcessor.class);
        //MapperScannerConfigurer后处理器能够解析@Mapper，放进容器(SSM整合时常用)
        context.registerBean(MapperScannerConfigurer.class, bd -> {
            //给bean定义增加属性
            bd.getPropertyValues().add("basePackage", "p05_BeanFactory后处理器.mapper");
        });

        context.refresh();

        //打印看看有几个bean
        for (String name : context.getBeanDefinitionNames()) {
            System.out.println(name);
        }
    }

}
